home *** CD-ROM | disk | FTP | other *** search
- Path: sun001.spd.dsccc.com!spd!jmccarty
- From: jmccarty@spd.dsccc.com (Mike McCarty)
- Newsgroups: comp.lang.pascal.misc,comp.lang.c++,comp.lang.c,comp.lang.pascal.borland
- Subject: Re: Tough FACTORIAL math problem...
- Date: 15 Feb 1996 19:20:30 GMT
- Organization: DSC Communications Corporation, Plano, Texas USA
- Message-ID: <4g011u$gna@sun001.spd.dsccc.com>
- References: <4fr8be$ass@news.iconn.net> <31224679.6193@born.com>
- NNTP-Posting-Host: aplo139.spd.dsccc.com
-
- In article <31224679.6193@born.com>, John Cleland <clelaj@born.com> wrote:
- )The Crow wrote:
- )>
- )> Here is what I am trying to do, I want to find the last NON-ZERO digit of a
- )> given factorial. For instance,
- )>
- )> 5! = 120
- )>
- )> so the last non-zero digit is 2. I want to be able to do this up to 1000.
- )> Problem is, no matter how huge of a data-type you use, there isn't any way for
- )> the computer to handle 1000!, it is however possible to find the last non-zero
- )> digit somehow. One thing I have tried is as I went through mulitplying the
- )> series of numbers in the factorial (5 * 4 * 3 * 2) I would remove all the
- )> trailing ZEROS, I got this to work up to 789, but it wont work with 1000 and i
- )> am not really sure why. If anyone has a clue how I can do this let me know.
- )
- )Don't just strip the trailing zeros, remove all digits except the last non-zero
- )digit (which is your output) and then multiply by the next number in your sequence.
- )This keeps the numbers down to a managable level and gives the correct answer as
- )no more significant digit can affect the value of the LSD.
-
- Per my previous reply: Perhaps I didn't go far enough. Keeping the 2 in
- 5! etc. works up to a point, after which the problem begins to show up
- later in the game. Eventually you need to keep three, then four digits,
- etc.
-
- Mike
- ----
- char *p="char *p=%c%s%c;main(){printf(p,34,p,34);}";main(){printf(p,34,p,34);}
-
- I don't speak for DSC. <- They make me say that.
-